﻿using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using Microsoft.SharePoint;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Mail;
using iTextSharp.text;
using iTextSharp.text.pdf;


namespace TIT.ABDI.ChamadosTI.Relatorio_Alex_Teste
{
    public partial class Relatorio_Alex_TesteUserControl : UserControl
    {

        SPWeb myWeb = SPContext.Current.Web;
        protected DateTime dataInicial;
        protected DateTime dataFinal;
        protected void Page_Load(object sender, EventArgs e)
        {
       
            if (Page.IsPostBack)
            {
                DateTime now = DateTime.Now;
                DateTime today = DateTime.Today;

                if (periodo_mes.Checked)
                {
                    dataInicial = new DateTime(now.Year, now.Month, 1); // Primeiro dia do mes atual
                    dataFinal = now;
                }
                else if (periodo_mes_anterior.Checked)
                {
                    
                    DateTime mes_anterior = today.AddMonths(-1);
                    dataInicial = new DateTime(mes_anterior.Year, mes_anterior.Month, 1); // Primeiro dia do mês anterior
                    dataFinal = dataInicial.AddMonths(1).AddDays(-1); // Último dia do mês anterior
                }
                else if (periodo_personalizado.Checked)
                {
                    dataInicial = DateTime.ParseExact(dtInicio.Text, "dd/MM/yyyy", null);
                    dataFinal = DateTime.ParseExact(dtFinal.Text, "dd/MM/yyyy", null);
                }
                else
                {
                    dataInicial = today;
                    dataFinal = now;
                }

                relatorios_filtros.InnerHtml = "";

                const string filtroTmpl = "<li data-ref=\"{0}\"><span>{1}: {2}</span><a href=\"#\" class=\"remove_filter\" title=\"Remover Filtro.\">X</a></li>";

                if (!String.IsNullOrEmpty(filtro_atendente.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 5, "Atendente", filtro_atendente.Value);
                }

                /*if (!String.IsNullOrEmpty(filtro_incidente.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 7, "Incidente", filtro_incidente.Value);
                }*/

                if (!String.IsNullOrEmpty(filtro_prioridade.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 2, "Prioridade", filtro_prioridade.Value);
                }

                if (!String.IsNullOrEmpty(filtro_setor_ti.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 4, "Setor TI", filtro_setor_ti.Value);
                }

                if (!String.IsNullOrEmpty(filtro_requerimento.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 8, "Solicitação de Serviço", filtro_requerimento.Value);
                }

                if (!String.IsNullOrEmpty(filtro_situacao.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 1, "Situação", filtro_situacao.Value);
                }

                if (!String.IsNullOrEmpty(filtro_solicitante.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 6, "Solicitante", filtro_solicitante.Value);
                }

                if (!String.IsNullOrEmpty(filtro_tipo_de_servico.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 3, "Tipo de serviço", filtro_tipo_de_servico.Value);
                }

                if (!String.IsNullOrEmpty(filtro_excluido.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 9, "Excluído", filtro_excluido.Value);
                }

                if (!String.IsNullOrEmpty(filtro_projeto.Value))
                {
                    relatorios_filtros.InnerHtml += String.Format(filtroTmpl, 11, "Projeto", filtro_projeto.Value);
                }

                if (!String.IsNullOrEmpty(relatorios_filtros.InnerHtml))
                {
                    relatorios_filtros.InnerHtml = "<li>Filtros: </li>" + relatorios_filtros.InnerHtml;
                }
            }
            else
            {
                limpar();
                SetDdlTipoRelatorio();
            }
            btnEnviarEmail.Visible = Page.IsPostBack;
            btnPDF.Visible = Page.IsPostBack;
            RelatorioGrafico.Visible = false;
            email_enviado_sucesso.Visible = false;
        }

        public string foo {get; set;}

        private void SetDdlTipoRelatorio()
        {
            try
            {
                List<System.Web.UI.WebControls.ListItem> TiposRelatorio = new List<System.Web.UI.WebControls.ListItem>();

                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Situação", "1"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Prioridade", "2"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Tipo de Serviço", "3"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Setor TI", "4"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Atendente", "5"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Solicitante", "6"));
                //TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Incidente", "7"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Solicitação de Serviços", "8"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Chamados Excluídos", "9"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Por Projeto", "11"));
                TiposRelatorio.Add(new System.Web.UI.WebControls.ListItem("Relatório Analítico", "10"));

                ddlTipoRelatorio.DataSource = TiposRelatorio;
                ddlTipoRelatorio.DataTextField = "text";
                ddlTipoRelatorio.DataValueField = "value";
                ddlTipoRelatorio.DataBind();
            }
            catch (Exception e)
            {
                Response.Write("Erro ao preencher o DropDownList. Erro: " + e.Message);
            }
        }

        protected void btn_consultar_click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(ddlTipoRelatorio.SelectedValue) == 10)
            {
                chartLabel.InnerText = "";
                RelatorioGrafico.Visible = false;
                relatorios_analitico();
                return;
            }

            IEnumerable<Group> Relatorio = getData();

            if (Relatorio.Count() == 0)
            {
                divmap.InnerHtml = "Nenhum Chamado Encontrado";
                btnEnviarEmail.Visible = false;
                btnPDF.Visible = false;
                return;
            }
            string key = getLabel(false);
            int total = 0;

            RelatorioGrafico.Visible = true;
            chartLabel.InnerText = string.Format("Gráfico por {0}", key);

            StringBuilder sbh = new StringBuilder();
            sbh.Append("<table class=\"chamadosRelatorio\" id=\"data-table\"><thead><tr class=\"chamadoCabecalho\">");
            sbh.Append("<th width=\"50%\">" + key + "</th>");
            sbh.Append("<th width=\"50%\">Quantidade</th></tr></thead><tbody>");
            int idx = 0;
            foreach (Group g in Relatorio)
            {
                sbh.Append("<tr class=\""+ (idx % 2 == 0 ? "ms-alternating" : "") + "\">");
                sbh.Append("<td class=\"ms-vb\"><a href=\"javascript:void(0)\" class=\"add_filter\">" + (g.Status == null ? "" : g.Status.ToString()) + "</a></td>");
                sbh.Append("<td class=\"ms-vb\">" + g.Quantidade.ToString() + "</td>");
                sbh.Append("</tr>");
                total += g.Quantidade;
            }
            sbh.Append("</tbody><tfoot><tr><td class=\"ms-vb\">Total</td>");
            sbh.Append("<td class=\"ms-vb\">" + total + "</td></tr></tfoot></table>");
            divmap.InnerHtml = sbh.ToString();
        }

        protected IEnumerable<Group> getData()
        {
            var Chamados = GetAllChamados();
            
            switch (Convert.ToInt32(ddlTipoRelatorio.SelectedValue))
            {
                case 2:/* Prioridade */
                    return from u in Chamados
                                group u by u.Prioridade into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 3:/* Tipo de Serviço */
                    return from u in Chamados
                            .Where(i => !"".Equals(i.tipo_de_servico))
                           group u by u.tipo_de_servico into g
                           select new Group { Status = g.Key, Quantidade = g.Count() };
                case 4:/* Setor TI */
                    return from u in Chamados
                            .Where(i => !"".Equals(i.SetorTI))
                                group u by u.SetorTI into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 5:/* Atendente */
                    return from u in Chamados
                            .Where(i => !"".Equals(i.ModificadoPor))
                                group u by u.ModificadoPor into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 6:/* Solicitante */
                    return from u in Chamados
                                group u by u.CriadoPor into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                //case 7:/* Incidente */
                //    return from u in Chamados
                //            .Where(i => "Incidentes".Equals(i.tipo_de_servico))
                //                group u by u.Incidente into g
                //                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 8:/* Solicitação de Serviços*/
                    return from u in Chamados
                            //.Where(i => "Requerimento de Serviços".Equals(i.tipo_de_servico))
                                group u by u.Requerimento into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 9:/* Chamados excluidos */
                    return from u in Chamados
                                group u by u.excluido into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
                case 11:/* Projeto */
                    return from u in Chamados
                           group u by u.projeto into g
                           select new Group { Status = g.Key, Quantidade = g.Count() };
                default:
                    return from u in Chamados
                                group u by u.Situacao into g
                                select new Group { Status = g.Key, Quantidade = g.Count() };
            }
        }

       protected string getLabel(bool date)
       {
           string suffix = "";
           string label;

           if (date)
           {
               suffix = " - ";
               if (periodo_hoje.Checked)
               {
                   suffix += dataInicial.ToString("dd/MM/yyyy");
               }
               else
               {
                   suffix += dataInicial.ToString("dd/MM/yyyy") + " - " + dataFinal.ToString("dd/MM/yyyy");
               }
           }

           switch (Convert.ToInt32(ddlTipoRelatorio.SelectedValue))
           {
               case 2:
                   label = "Prioridade";
                   break;
               case 3:
                   label = "Tipo de Serviço";
                   break;
               case 4:
                   label = "Setor TI";
                   break;
               case 5:
                   label = "Atendente";
                   break;
               case 6:
                   label = "Solicitante";
                   break;
               //case 7:
               //    label = "Incidente";
               //    break;
               case 8:
                   label = "Solicitação de Serviço";
                   break;
               case 9:
                   label = "Chamados Excluídos";
                   break;
               case 10:
                   label = "Relatório Analitico";
                   break;
               case 11:
                   label = "Projeto";
                   break;
               default:
                   label = "Situação";
                   break;
           }
           return label + suffix;
       }

        protected void relatorios_analitico()
        {
            var Chamados = GetAllChamados();

            StringBuilder sbh = new StringBuilder();

            if (Chamados.Count == 0)
            {
                divmap.InnerHtml = "Nenhum Chamado Encontrado";
                btnEnviarEmail.Visible = false;
                btnPDF.Visible = false;
                return;
            }

            int page = String.IsNullOrEmpty(page_number.Value) ? 0 : Int32.Parse(page_number.Value);
            page = System.Math.Max(1, page);
            const int ItemsPerPage = 30;
            int offset = (page - 1) * ItemsPerPage;
            int MaxOffset = offset + ItemsPerPage;
            int length = Chamados.Count();

            sbh.Append("<table class=\"chamadosRelatorio no-graph\" id=\"data-table\"><thead><tr class=\"chamadoCabecalho\">");
            sbh.Append("<th>Nº</th>");
            sbh.Append("<th>Solicitação de Serviço</th>");
            sbh.Append("<th>Projeto</th>");
            sbh.Append("<th>Situação</th>");
            sbh.Append("<th>Criado Por</th>");
            sbh.Append("<th>Criado Em</th>");
            sbh.Append("<th>Resolvido Em</th>");
            sbh.Append("<th>Atendente</th>");
            sbh.Append("<th>Setor TI</th>");
            sbh.Append("<th>Tempo Gasto</th>");
            sbh.Append("</tr></thead><tbody>");
            for (int i = offset; i < MaxOffset && i < length; i++)
            {
                Chamado c = Chamados[i];
                String datafim = "Não Definido";
                if (c.Situacao.ToString().Equals("Concluído")) {
                    datafim = c.Modificado.ToString("d/M/yyyy H:mm");
                }
                sbh.Append("<tr class=\"" + (i % 2 == 0 ? "ms-alternating" : "") + "\">");

                sbh.Append("<td class=\"ms-vb\"><a href=\"/chamadosti/SitePages/DetalheChamado_relatorio.aspx?idc=" + HttpUtility.HtmlEncode(c.Id.ToString()) + "\">" + HttpUtility.HtmlEncode(c.Id.ToString()) + "</a></td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.Requerimento)/* + HttpUtility.HtmlEncode(c.Incidente)*/ + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.projeto) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.Situacao) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.CriadoPor) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.Criado.ToString("d/M/yyyy H:mm")) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(datafim) + "</td>");
                //sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.Modificado.ToString("d/M/yyyy H:mm"))+ "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.ModificadoPor) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.SetorTI) + "</td>");
                sbh.Append("<td class=\"ms-vb\">" + HttpUtility.HtmlEncode(c.TempoGasto) + "</td>");
                sbh.Append("</tr>");
            }
            sbh.Append("</tbody></table>");

            if (offset > 0 || length > MaxOffset)
            {
                sbh.Append("<table><tbody><tr><td nowrap=\"\" class=\"ms-paging\" align=\"right\">");
                if (offset > 0)
                {
                    sbh.Append("<a href=\"javascript:void(0)\" id=\"prev_page\"><img src=\"/_layouts/images/prev.gif\" border=\"0\" alt=\"Prev\"></a>");
                }
                sbh.Append(String.Format("{0} - {1}", offset, MaxOffset < length ? MaxOffset : length));
                if (length > MaxOffset)
                {
                    sbh.Append("<a href=\"javascript:void(0)\" id=\"next_page\"><img src=\"/_layouts/images/next.gif\" border=\"0\" alt=\"Next\"></a>");
                }
                sbh.Append("</td></tr></tbody></table>");
            }

            divmap.InnerHtml = sbh.ToString();
        }
        protected void btnEnviarEmail_click(object sender, EventArgs e)
        {
            MailMessage mail = new MailMessage();

            mail.From = new MailAddress("chamadosti@abdi.com.br");
            mail.To.Add(SPContext.Current.Web.CurrentUser.Email);
            mail.IsBodyHtml = true;

            mail.Subject = "Relatórios de Chamados TI";
            mail.Body = getLabel(true);

            MemoryStream stream;
            if (Convert.ToInt32(ddlTipoRelatorio.SelectedValue) == 10)
            {
                stream = new MemoryStream(generatePDFRA().ToArray());
            }
            else if (!string.IsNullOrEmpty(base64_chart.Value) && base64_chart.Value.Length > 22)
            {
                stream = new MemoryStream(generatePDF().ToArray());
            }
            else
            {
                throw new Exception("Não foi possível gerar o PDF");
            }
            mail.Attachments.Add(new Attachment(stream, mail.Subject + " - " + mail.Body + ".pdf"));

            SmtpClient smtp = new SmtpClient("smtp.abdi.com.br");
            smtp.Send(mail);

            email_enviado_sucesso.Visible = true;
            btn_consultar_click(sender, e);
        }

        protected void btnPDF_click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(ddlTipoRelatorio.SelectedValue) == 10)
            {
                sendPDFRA();
            }
            else if (!String.IsNullOrEmpty(base64_chart.Value) && base64_chart.Value.Length > 22)
            {
                sendPDF();
            }
            else
            {
                throw new Exception("Não foi possível gerar o PDF");
            }
        }

        protected void sendPDFRA()
        {
            MemoryStream ms = generatePDFRA();

            string fileName = "Relatórios de Chamados TI - " + getLabel(true);
            if (Request.Browser.IsBrowser("IE"))
            {
                fileName = Server.UrlEncode(fileName);
            }

            byte[] byteArray = ms.ToArray();
            ms.Flush();
            ms.Close();
            Response.Clear();
            Response.AddHeader("Content-Disposition", String.Format("inline; filename={0}.pdf", fileName));
            Response.AddHeader("Content-Length", byteArray.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(byteArray);
        }

        protected MemoryStream generatePDFRA()
        {
            iTextSharp.text.Document documento = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1240, 1754));
            MemoryStream ms = new MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(documento, ms);
            documento.Open();

            int totalfonts = FontFactory.RegisterDirectory("C:\\WINDOWS\\Fonts");
            Font arial_header = FontFactory.GetFont("Arial", 19, Font.BOLD);
            arial_header.SetColor(51, 51, 51);
            Font arial_bold = FontFactory.GetFont("Arial", 17, Font.BOLD);
            Font arial = FontFactory.GetFont("Arial", 17);


            // Tabela
            var Chamados = GetAllChamados();
            PdfPTable table = new PdfPTable(10);
            PdfPCell cell = new PdfPCell(new Phrase("Relatórios de Chamados TI", arial_header));
            cell.Colspan = 10;
            cell.Border = 0;
            cell.HorizontalAlignment = 1;
            cell.MinimumHeight = 28f;
            cell.VerticalAlignment = Element.ALIGN_TOP;
            table.AddCell(cell);
            table.AddCell(new Phrase("Nº", arial_bold));
            table.AddCell(new Phrase("Solicitação de Serviço", arial_bold));
            table.AddCell(new Phrase("Projeto", arial_bold));
            table.AddCell(new Phrase("Situação", arial_bold));
            table.AddCell(new Phrase("Criado Por", arial_bold));
            table.AddCell(new Phrase("Criado Em", arial_bold));
            table.AddCell(new Phrase("Resolvido Em", arial_bold));
            table.AddCell(new Phrase("Atendente", arial_bold));
            table.AddCell(new Phrase("Setor TI", arial_bold));
            table.AddCell(new Phrase("Tempo Gasto", arial_bold));

            foreach (Chamado c in Chamados)
            {
                table.AddCell(new Phrase(c.Id.ToString(), arial));
                table.AddCell(new Phrase(c.Requerimento/* + c.Incidente*/, arial));
                table.AddCell(new Phrase(c.projeto, arial));
                table.AddCell(new Phrase(c.Situacao, arial));
                table.AddCell(new Phrase(c.CriadoPor, arial));
                table.AddCell(new Phrase(c.Criado.ToString("d/M/yyyy H:mm"), arial));
                table.AddCell(new Phrase(c.Modificado.ToString("d/M/yyyy H:mm"), arial));
                table.AddCell(new Phrase(c.ModificadoPor, arial));
              
                table.AddCell(new Phrase(c.SetorTI, arial));
                table.AddCell(new Phrase(c.TempoGasto, arial));
            }
            documento.Add(table);

            documento.Close();

            return ms;
        }

        protected void sendPDF()
        {
            MemoryStream ms = generatePDF();

            string fileName = "Relatórios de Chamados TI - "+getLabel(true);
            if (Request.Browser.IsBrowser("IE"))
            {
                fileName = Server.UrlEncode(fileName);
            }

            byte[] byteArray = ms.ToArray();
            ms.Flush();
            ms.Close();
            Response.Clear();
            Response.AddHeader("Content-Disposition", String.Format("inline; filename={0}.pdf", fileName));
            Response.AddHeader("Content-Length", byteArray.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(byteArray);
        }

        protected MemoryStream generatePDF()
        {
            iTextSharp.text.Image img = LoadImage();
            iTextSharp.text.Document documento = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1240, 1754));
            MemoryStream ms = new MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(documento, ms);
            documento.Open();

            FontFactory.RegisterDirectory("C:\\WINDOWS\\Fonts");
            Font arial_header = FontFactory.GetFont("Arial", 19, Font.BOLD);
            arial_header.SetColor(51, 51, 51);
            Font verdana_header = FontFactory.GetFont("Verdana", 18, Font.BOLD);
            verdana_header.SetColor(51, 51, 51);
            Font verdana = FontFactory.GetFont("Verdana", 17);
            Font arial = FontFactory.GetFont("Arial", 17);


            // Tabela
            PdfPTable table = new PdfPTable(2);
            PdfPCell cell = new PdfPCell(new Phrase("Relatórios de Chamados TI", arial_header));
            cell.Colspan = 2;
            cell.Border = 0;
            cell.HorizontalAlignment = 1;
            cell.MinimumHeight = 28f;
            cell.VerticalAlignment = Element.ALIGN_TOP;
            table.AddCell(cell);
            table.AddCell(new PdfPCell(new Phrase(getLabel(false), verdana_header)));
            table.AddCell(new PdfPCell(new Phrase("Quantidade", verdana_header)));
            int total = 0;
            foreach (Group g in getData())
            {
                table.AddCell(new PdfPCell(new Phrase(g.Status == null ? "" : g.Status.ToString(), arial)));
                table.AddCell(new PdfPCell(new Phrase(g.Quantidade.ToString(), verdana)));
                total += g.Quantidade;
            }
            table.AddCell(new PdfPCell(new Phrase("Total", arial)));
            table.AddCell(new PdfPCell(new Phrase(total.ToString(), verdana)));
            table.SpacingAfter = 20f;
            documento.Add(table);

            // Gráfico
            img.ScalePercent(48f);
            img.Alignment = iTextSharp.text.Image.ALIGN_CENTER;
            documento.Add(img);

            documento.Close();

            return ms;
        }
        protected iTextSharp.text.Image LoadImage()
        {
            const string prefix = "data:image/png;base64,";
            byte[] bytes = Convert.FromBase64String(base64_chart.Value.Substring(prefix.Length));

            iTextSharp.text.Image image;
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                image = iTextSharp.text.Image.GetInstance(bytes);
            }

            base64_chart.Value = "";

            return image;
        }


         
        protected void limpar()
        {
            periodo_hoje.Checked = true;
            periodo_mes.Checked = false;
            periodo_mes_anterior.Checked = false;
            periodo_personalizado.Checked = false;
            filtro_atendente.Value = "";
            //filtro_incidente.Value = "";
            filtro_prioridade.Value = "";
            filtro_setor_ti.Value = "";
            filtro_requerimento.Value = "";
            filtro_situacao.Value = "";
            filtro_solicitante.Value = "";
            filtro_tipo_de_servico.Value = "";
            filtro_projeto.Value = "";

            dtInicio.Text="";
            dtFinal.Text = "";
        }

        private List<Chamado> GetAllChamados()
        {
            List<Chamado> Chamado = myWeb.Lists["Chamado"].Items.Cast<SPListItem>()
                                    .Select(p => new Chamado()
                                    {
                                        Id = Convert.ToInt32(p["ID"]),
                                        Titulo = p["Título"] != null ? p["Título"].ToString() : "",
                                        Situacao = p["Situacao"] != null ? p["Situacao"].ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries).ElementAtOrDefault(1) ?? "***" : "Não definido",
                                        Prioridade = p["Prioridade"] != null ? p["Prioridade"].ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries).ElementAtOrDefault(1) ?? "***" : "Não definido",
                                        //Incidente = p["Incidente"] != null ? p["Incidente"].ToString() : "",
                                        Requerimento = p["Requerimento"] != null ? p["Requerimento"].ToString() : "",
                                        Criado = DateTime.Parse(p["Criado"].ToString()),
                                        CriadoPor = p["Criado por"] != null ? p["Criado por"].ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries).ElementAtOrDefault(1) ?? "***" : "",
                                        //Modificado = DateTime.Parse(p["Data Concluído"].ToString()) != null && !p["Situacao"].ToString().Contains("Aberto") ? DateTime.Parse(p["Data Concluído"].ToString()):"",
                                        Modificado = p["Data Concluído"] != null ? DateTime.Parse(p["Data Concluído"].ToString()) :  DateTime.Parse("01/01/1780"),
                                        ModificadoPor = p["Concluído por"] != null && !p["Situacao"].ToString().Contains("Aberto") ? p["Concluído por"].ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries).ElementAtOrDefault(1) ?? "***" : "Não Definido",
                                        tipo_de_servico = p["tipo_de_servico"] != null ? p["tipo_de_servico"].ToString() : "Não definido",
                                        SetorTI = p["SetorTI"] != null ? p["SetorTI"].ToString().Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries).ElementAtOrDefault(1) ?? "***" : "Não definido",
                                        excluido = p["excluido"] != null ? p["excluido"].ToString() : "Não",
                                        projeto = p["projeto"] != null && !String.IsNullOrEmpty(p["projeto"].ToString()) ? p["projeto"].ToString() : "Não definido",
                                        TempoGasto = p["tempo_gasto"] != null ? p["tempo_gasto"].ToString() : "Não definido"
                                    })
                                    .ToList();

            Chamado = Chamado.Where(i => i.Criado.Date >= dataInicial.Date && i.Criado.Date <= dataFinal.Date).ToList();

            if (!String.IsNullOrEmpty(filtro_atendente.Value))
            {
                  Chamado = Chamado.Where(c => c.ModificadoPor == filtro_atendente.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_incidente.Value))
            {
                Chamado = Chamado.Where(c => c.Incidente == filtro_incidente.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_prioridade.Value))
            {
                Chamado = Chamado.Where(c => c.Prioridade == filtro_prioridade.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_setor_ti.Value))
            {
                Chamado = Chamado.Where(c => c.SetorTI == filtro_setor_ti.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_requerimento.Value))
            {
                Chamado = Chamado.Where(c => c.Requerimento == filtro_requerimento.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_situacao.Value))
            {
                Chamado = Chamado.Where(c => c.Situacao == filtro_situacao.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_solicitante.Value))
            {
                Chamado = Chamado.Where(c => c.CriadoPor == filtro_solicitante.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_tipo_de_servico.Value))
            {
                Chamado = Chamado.Where(c => c.tipo_de_servico == filtro_tipo_de_servico.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_excluido.Value))
            {
                Chamado = Chamado.Where(c => c.excluido == filtro_excluido.Value).ToList();
            }

            if (!String.IsNullOrEmpty(filtro_projeto.Value))
            {
                Chamado = Chamado.Where(c => c.projeto == filtro_projeto.Value).ToList();
            }

            return Chamado;
        }
    }

    public class Group {
        public string Status { get; set; }
        public int Quantidade { get; set; }
    }
}

     

